params = {
    "client_num": 200,  # 老人数量上限
    "caregiver_num": 200,  # 护理人员数量上限
    "population_size": 50,  # 遗传算法种群大小
    "crossover_rate": 0.3,  # 交叉率
    "mutation_rate": 0.115,  # 变异率
    "phenotype_limit": 200,  # 最大迭代代数
    "elimination_size": 5,  # 每代淘汰数量
    "initial_temperature": 100.0,  # 模拟退火初始温度
    "cooling_rate": 0.995,  # 温度冷却率
    "time_slots_per_day": 72,  # 新增参数，表示一天中的时间槽数量
    "time_interval_minutes": 20,  # 新增参数，表示每个时间槽的分钟数
    "caregiver_availability_weight": 0.3,  # 护理员可用性在适应度计算中的权重
    "scheduling_conflict_penalty": 50,  # 调度冲突的惩罚值
    "unassigned_slot_penalty": 30,  # 未分配时间段的惩罚值
    "use_algorithm_optimization": True,  # 是否使用算法优化排班方案
    # 强化学习参数
    "rl_learning_rate": 0.1,  # 学习率
    "rl_discount_factor": 0.9,  # 折扣因子
    "rl_exploration_rate": 0.1,  # 探索率
    "rl_exploration_decay": 0.995,  # 探索率衰减
    "rl_min_exploration_rate": 0.01,  # 最小探索率
}

# 添加三班制排班相关配置
shift_config = {
    "morning_shift": {
        "start_time": "06:00",
        "end_time": "14:00",
        "name": "班次1",  # 早班改为班次1
        "order": 1,  # 添加排序字段
    },
    "afternoon_shift": {
        "start_time": "14:00",
        "end_time": "22:00",
        "name": "班次2",  # 中班改为班次2
        "order": 2,  # 添加排序字段
    },
    "night_shift": {
        "start_time": "22:00",
        "end_time": "06:00",
        "name": "班次3",  # 夜班改为班次3
        "order": 3,  # 添加排序字段
    },
}

# 护理员白天/夜班分配的权重比（默认为黄金分割比1.618）
day_night_ratio = 1.618

# 预留护理资源比例，用于应对新入住老人的临时需求
reserve_resource_ratio = 0.1

# 班制控制参数
shift_control = {
    "enabled_shifts": ["morning_shift", "afternoon_shift", "night_shift"],  # 启用的班次
    "min_shifts_per_day": 1,  # 每天最少需要的班次数
    "max_shifts_per_day": 3,  # 每天最多允许的班次数
    "allow_empty_shifts": False,  # 是否允许某些班次为空（没有护理员）
    "shift_sort_method": "time",  # 班次排序方式: 'time' 或 'order'
    "auto_adjust_time": True,  # 是否自动调整班次时间以覆盖24小时
}

# 三班制排班接口全局参数
three_shift_params = {
    "schedule_type": 1,  # 排班类型: 1(按天), 2(按周), 3(按月), 4(按季度), 5(按年)
    "start_date": "2025-09-09",  # 开始日期，如果为None则使用当前日期，格式为'YYYY-MM-DD'，例如'2023-04-07'
    "num_days": 3,  # 排班天数，当schedule_type为1(按天)时有效
    "shift_start_time": "09:07",  # 班次开始时间，格式为'HH:MM'，例如'06:00'
    "shift_mode": 3,  # 班制模式：1(一班制), 2(二班制), 3(三班制), 4(自定义班制)
    "custom_shifts": [1, 3],  # 自定义班次列表：仅当shift_mode=4(自定义班制)时生效
    # 格式：[班次编号, ...]
    # 班次编号：1=班次1(早班), 2=班次2(中班), 3=班次3(夜班)
    # 示例：[1, 3]表示启用班次1和班次3
    # 示例：[]表示不启用任何班次，将回退到三班制
    # 示例：[1, 2, 3]表示启用所有班次
    "time_slots_per_day": 72,  # 一天中的时间槽数量，默认为72个，每个20分钟
    "time_interval_minutes": 20,  # 每个时间槽的分钟数，默认为20分钟
}

# 班制模式配置
shift_mode_config = {
    "one_shift": {
        "name": "一班制",
        "shifts": ["morning_shift"],
        "description": "全夤24小时一个班次",
        "hours_per_shift": 24.0,
    },
    "two_shift": {
        "name": "二班制",
        "shifts": ["morning_shift", "night_shift"],
        "description": "全天分为两个班次，每班12小时",
        "hours_per_shift": 12.0,
    },
    "three_shift": {
        "name": "三班制",
        "shifts": ["morning_shift", "afternoon_shift", "night_shift"],
        "description": "全天分为三个班次，每班8小时",
        "hours_per_shift": 8.0,
    },
    "custom": {
        "name": "自定义班制",
        "shifts": [],  # 动态配置
        "description": "自定义班次数量和时间",
        "hours_per_shift": None,  # 动态计算
    },
}

# 护理员休息时间控制参数
rest_time_control = {
    # 基本休息时间参数
    "min_rest_between_shifts": 8,  # 两个班次之间的最小休息时间（小时）
    "min_rest_after_night_shift": 12,  # 夜班后的最小休息时间（小时）
    "max_consecutive_shifts": 3,  # 最大连续工作班次数
    # 班次转换休息时间（从一种班次转到另一种班次需要的最小休息时间）
    "shift_transition_rest": {
        "morning_shift_to_afternoon_shift": 8,  # 从班次1转到班次2需要的休息时间
        "afternoon_shift_to_night_shift": 10,  # 从班次2转到班次3需要的休息时间
        "night_shift_to_morning_shift": 12,  # 从班次3转到班次1需要的休息时间
        "morning_shift_to_night_shift": 16,  # 从班次1直接转到班次3需要的休息时间
        "afternoon_shift_to_morning_shift": 8,  # 从班次2转到班次1需要的休息时间
        "night_shift_to_afternoon_shift": 10,  # 从班次3转到班次2需要的休息时间
    },
    # 每周工作时间限制
    "max_weekly_work_hours": 40,  # 每周最大工作时间（小时）
    "max_weekly_night_shifts": 3,  # 每周最大夜班次数
    # 特殊休息规则
    "require_weekend_rest": True,  # 是否要求周末至少休息一天
    "max_weekend_shifts_per_month": 2,  # 每月最多的周末班次数
    # 公平性控制
    "balance_shift_distribution": True,  # 是否平衡分配不同类型的班次
    "rotation_pattern": "forward",  # 轮班模式：'forward'(顺时针), 'backward'(逆时针), 'random'(随机)
}
